import 'package:flutter/material.dart';
import 'dart:convert';

import '../services/Storage.dart';

class Cart with ChangeNotifier{
  List _cartList = [];  // 商品列表
  bool _isCheckedAll = false; // 全选、反选
  double _allPrice = 0;  // 总价
  List _checkedTrueCartList = [];
  List _checkedFalseCartList = [];

  List get cartList => this._cartList;  // 获取商品列表
  bool get isCheckedAll => this._isCheckedAll;  // 获取全选、反选值
  double get allPrice => this._allPrice;  // 获取总价
  List get checkedTrueCartList => this._checkedTrueCartList;   // 获取选中的商品列表
  List get checkedFalseCartList => this._checkedFalseCartList;   // 获取未选中商品列表

  // 初始化
  Cart(){
    this.init();
  }

  init() async {
    // 初始化的时候获取购物车数据
    try{
      List cartListData = json.decode(await Storage.getString('cartList'));
      this._cartList = cartListData;
    }catch(err){
      this._cartList = [];
    }

    // 初始化的时候判断是否全选
    this._isCheckedAll = this.isCheckAll();

    // 初始化的时候计算价格
    this.computeAllPrice();

    // 获取选中的商品列表
    getCheckedTrueCartList();

    // 更新状态
    notifyListeners();
  }

  // 更新数据，重新获取数据
  updateCartListData(){
    this.init();

    // 获取选中的商品列表
    getCheckedTrueCartList();

    // 更新状态
    notifyListeners();
  }

  // 当每一项item改变时，修改Storage中保存cartList中值
  changeItem(){
    // 更新Storage中的cartList数据
    Storage.setString('cartList', json.encode(this.cartList));

    // 计算总价
    computeAllPrice();

    // 获取选中的商品列表
    getCheckedTrueCartList();

    // 更新状态
    notifyListeners();
  }

  // 手动全选、反选
  checkAll(value){
    for(var i=0; i<this._cartList.length; i++){
      this._cartList[i]['checked'] = value;
    }

    this._isCheckedAll = value;

    // 更新Storage中的cartList数据
    Storage.setString('cartList', json.encode(this.cartList));

    // 计算总价
    this.computeAllPrice();

    // 获取选中的商品列表
    getCheckedTrueCartList();

    // 更新状态
    notifyListeners();
  }

  // 判断是否全选
  bool isCheckAll(){
    if (_cartList.length > 0){
      for(var i=0; i<_cartList.length; i++){
        if(_cartList[i]['checked'] == false) {
          return false;
        }
      }
      return true;
    }
    return false;
  }

  // 监听每一项的选中事件，判断是否全选
  itemCheckedChange(){
    this._isCheckedAll = this.isCheckAll();
    this.changeItem();
  }

  // 计算总价
  computeAllPrice(){
    double tempAllPrice=0;
    for(var i=0; i<_cartList.length; i++){
      if(_cartList[i]['checked']){
        num price = _cartList[i]['price'];
        int count = _cartList[i]['count'];
        tempAllPrice += price * count;
      }
    }
    this._allPrice = tempAllPrice;

    // 更新状态
    notifyListeners();
  }

  // 删除item
  removeItem() {
    List tempList = [];
    for(var i=0; i<this._cartList.length; i++){
      if(! this._cartList[i]['checked']){
        tempList.add(this._cartList[i]);
      }
    }
    this._cartList = tempList;

    // 获取选中的商品列表
    getCheckedTrueCartList();

    this.changeItem();
  }

  // 获取选中的商品列表
  getCheckedTrueCartList(){
    this._checkedTrueCartList = [];

    for(var i=0; i<cartList.length; i++){
      if (cartList[i]['checked']){
        this._checkedTrueCartList.add(cartList[i]);
      }
    }

    // 更新状态
    notifyListeners();
  }

  // 当结算页面结算之后，返回到购物车页面时，删除已结算商品
  getCheckedFalseCartList(){
    this._checkedFalseCartList = [];

    for(var i=0; i<cartList.length; i++){
      if (!cartList[i]['checked']){
        this._checkedFalseCartList.add(cartList[i]);
      }
    }

    // 更新Storage中的cartList数据
    Storage.setString('cartList', json.encode(this._checkedFalseCartList));

    this.init();
  }
}
